#pragma once

#include <google/protobuf/service.h>
#include <google/protobuf/message.h>
#include <google/protobuf/descriptor.h>

/**
 * 创建 rpc 调用方的代理对象时，构造函数要传入一个 RpcChannel 对象
 * 序列化、网络发送、接收响应、反序列化
*/
class MprpcChannel : public google::protobuf::RpcChannel
{
public:
    // 所有通过 sutb 代理对象调用 rpc 方法，都走到这里了，统一做 rpc 方法调用的数据序列化和反序列化和网络发送
    void CallMethod(const google::protobuf::MethodDescriptor* method,
                          google::protobuf::RpcController* controller,
                          const google::protobuf::Message* request,
                          google::protobuf::Message* response, 
                          google::protobuf::Closure* done) override;
};